Uvod u Python (v3)

Ispis podataka

In [112]:
print(10)
10
In [113]:
print("NISKA")
NISKA
In [114]:
a = 10
print(10)
10

Učitavanje podataka sa standardnog ulaza

In [115]:
a = input()
print(a)

In [197]:
n = input('Unesite vrednost n: ')
Unesite vrednost n: 123

Formatiran ispis

In [117]:
n = 10
print('Vrednost promenljive n je {}'.format(n))
Vrednost promenljive n je 10
In [118]:
a = 5
b = 6
print('a = {}, b = {}'.format(a, b))
a = 5, b = 6

Obrada izuzetaka

In [119]:
try:
    a = int(input())
    print(a)
except:
    print('Neispravna vrednost')
Neispravna vrednost

Učitavanje podataka iz datoteke

In [120]:
ulazni_fajl = open('ulaz.txt', 'r')
sadrzaj_datoteke = ulazni_fajl.read()
print(sadrzaj_datoteke)
Ovo je sadrzaj ulazne datoteke
In [199]:
try:
    ulazni_fajl = open('nepostojeca_datoteka.txt', 'r')
    sadrzaj_datoteke = ulazni_fajl.read()
    print(sadrzaj_datoteke)
except:
    print('Greska prilikom ucitavanja datoteke!')
Greska prilikom ucitavanja datoteke!

Ispis podataka u datoteku

In [122]:
try:
    izlazni_fajl = open('izlaz.txt', 'w')
    izlazni_fajl.write('Ovo je sadrzaj izlazne datoteke')
except:
    print('Doslo je do greske!')

If-else, for, while

In [212]:
try:
    a = int(input('Unesite vrednost celog broja a:'))
    if a % 3 == 0:
        print('Broj a je deljiv brojem 3')
    elif a % 3 == 1:
        print('Broj a daje ostatak 1 pri deljenju sa brojem 3')
    else:
        print('Broj a daje ostatak 2 pri deljenju sa brojem 3')
except:
    print('Neispravna vrednost broja a!')
Unesite vrednost celog broja a:11
Broj a daje ostatak 2 pri deljenju sa brojem 3
In [223]:
godina = 2000
if (godina % 4 == 0 and godina % 100 != 0) or (godina % 400 == 0):
    print('Godina {} je prestupna'.format(godina))
else:
    print('Godina {} je prosta'.format(godina))
Godina 2000 je prestupna
In [214]:
for i in range(0,5): # C-ovski: for(i = 0; i < 5; i++)
    print(i)
0
1
2
3
4
In [219]:
i = 0
while i < 5:
    print(i)
    i += 1 # operator ++ nije podrzan
0
1
2
3
4

Liste

In [123]:
lista = [1, 2, 3, 4]
print(lista)
[1, 2, 3, 4]
In [124]:
lista = [1, 2, 3, 4]
n = len(lista)
print('Duzina liste je: {}'.format(n))
Duzina liste je: 4

Iteracija kroz listu po indeksima

In [125]:
lista = [1, 2, 3, 4]
n = len(lista)

for i in range(0, n): # for i in range(len(lista))   [0,n) -> 0..n-1
    print(lista[i])
1
2
3
4

Iteracija kroz listu po elementima (foreach petlja)

In [126]:
lista = [1, 2, 3, 4]
n = len(lista)

for element in lista: # foreach
    print(element)
1
2
3
4

List comprehension

In [150]:
lista = [1, 5, 2, 4, 3]
kvadrirana = [x**2 for x in lista] # ** - stepen
print(kvadrirana)
[1, 25, 4, 16, 9]
In [207]:
lista = [1, 2, 3, 4, 5]
neparni = [x for x in lista if x % 2 == 1]
print(neparni)
[1, 3, 5]

Zipovanje lista

In [152]:
lista1 = [1, 2, 3, 4]
lista2 = ['a', 'b', 'c', 'd']
zipovana = zip(lista1, lista2)
print(zipovana)

for el in zipovana:
    print(el)
<zip object at 0x109b71c08>
(1, 'a')
(2, 'b')
(3, 'c')
(4, 'd')

Obrtanje liste

In [153]:
lista = [1, 2, 3, 4, 5]
lista.reverse()
print(lista)
[5, 4, 3, 2, 1]

Sortiranje liste

In [127]:
lista = [1, 5, 2, 4, 3]
lista.sort()
print(lista)
[1, 2, 3, 4, 5]
In [128]:
lista = [1, 5, 2, 4, 3]
lista.sort(reverse=True)
print(lista)
[5, 4, 3, 2, 1]

Izdvajanje podlisti

[polazni_indeks:zavrsni_index(n+1):korak]

In [129]:
lista = [1, 2, 3, 4]
print(lista[1:3]) # [1:3)
[2, 3]
In [130]:
lista = [1, 2, 3, 4]
print(lista[1:4:2]) # 2, (3), 4 
[2, 4]
In [131]:
lista = [1, 2, 3, 4] #  -4 -3 -2 -1
print(lista[-4:-1])  # [1, 2, 3, 4]
[1, 2, 3]

Matrice (višedimenzioni nizovi)

In [246]:
matrica = [[1, 2, 3],
           [4, 5, 6],
           [7, 8, 9]]

print(matrica)
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
In [248]:
matrica = [[1, 2, 3],
           [4, 5, 6],
           [7, 8, 9]]

print(matrica[2][2])
9

Dodavanje elemenata u listu i konkatenacija listi

In [132]:
lista = [1, 2, 3, 4]
lista.append(5) # Dodavanje elementa na kraj liste
print(lista)
[1, 2, 3, 4, 5]
In [204]:
lista = [1, 2, 3, 4]
lista.insert(3,3.4) # Dodavanje vrednosti 3.4 na poziciju u listi sa indeksom 3
print(lista)
[1, 2, 3, 3.4, 4]
In [133]:
lista = [1, 2, 3, 4]
lista.pop() # Uklanjanje elementa sa kraja liste
print(lista)
[1, 2, 3]
In [134]:
lista1 = [1, 2, 3, 4]
lista2 = [5, 6, 7, 8]
print(lista1 + lista2) # Konkatenacija listi
[1, 2, 3, 4, 5, 6, 7, 8]
In [135]:
element = 0
lista = [1, 2, 3, 4]
print ([element] + lista) # Dodavanje elementa na pocetak liste pomocu konkatenacije
[0, 1, 2, 3, 4]
In [205]:
lista = [1,2,3,4]
lista = lista[1:] # Uklanjanje elementa sa pocetka liste izdvajanjem podliste
print(lista)
[2, 3, 4]

Niske

In [186]:
niska = 'ABCD' # ili "ABCD"
print(niska)
ABCD
In [187]:
niska = "ABCD"
print(niska + 'E') # Konkatenacija niski
ABCDE
In [188]:
niska = 'ABCDE'

for c in niska:
    print(c)
A
B
C
D
E

Napomena: Liste su imutabilni objekti i njihov sadrzaj se ne moze menjati. Konkatenacija niski stvara novi objekat spojene niske

In [191]:
niska = 'ABCDE'
''' <- Ovo su oznake viselinijskih komentara
Ne radi 
niska[0] = 'X'
print(niska)
'''

# Trik za izmenu karaktera niske
listaKaraktera = list(niska)
listaKaraktera[0] = 'X'
niska = ''.join(listaKaraktera)
print(niska)
XBCDE

Torke

In [136]:
torka = (1, 2, 3, 4)
print(torka)
(1, 2, 3, 4)
In [225]:
torka = (7, 3, 9, 2)
print(torka[2])
9

Pseudoslučajni brojevi

In [137]:
import random
x = random.random()
print(x)
0.44220749995053255
In [156]:
import random
x = random()
print(x)
0.5703946386571607
In [159]:
import random
x = random.randrange(0, 10) # [0, 10)
print(x)
3
In [160]:
lista = [10, 100, 1000, 10000]
izabrani = random.choice(lista)
print(izabrani)
10000
In [161]:
lista = [10, 100, 1000, 10000]
podskup = random.sample(lista, 3)
print(podskup)
[10, 100, 1000]
In [162]:
skup = set([1, 2, 3, 4])
print(skup)
{1, 2, 3, 4}

Mape (Dictionary, Dict)

In [144]:
mapa = {
    'a': 1,
    'b': 2
}

print(mapa)
{'a': 1, 'b': 2}
In [145]:
mapa = {
    'a': 1,
    'b': 2
}

print(mapa['a'])
1
In [146]:
mapa = {}
# ili
mapa = dict([])

# Dodavanje elemenata u mapu
mapa['a'] = 10
print(mapa['a'])
10
In [227]:
mapa = {
    'a': 1,
    'b': 2
}

# Uklanjanje elemenata mape
del mapa['a']
print(mapa)
{'b': 2}
In [147]:
g = {
    'v': ['a','b','c']
}

print(g)
{'v': ['a', 'b', 'c']}
In [169]:
mapa = {
    'a': 1,
    'b': 2
}

# Iteracija kroz elemente mape
for (kljuc, vrednost) in mapa.items():
    print('{}: {}'.format(kljuc, vrednost))
    
print(mapa.items())
a: 1
b: 2
dict_items([('a', 1), ('b', 2)])
In [229]:
import math

print(math.sqrt(4))
print(math.ceil(2.3))
print(math.floor(5.3))
# ...
2.0
3
5

Funkcije

In [170]:
def saberi(a, b, c=0):
    return a + b + c

saberi(1,2)
Out[170]:
3
In [233]:
# Funkcija moze vratiti vise argumenata kroz strukturu tuple
def minimum_i_maksimum(a, b):
    minimum = min(a,b)
    maksimum = max(a,b)
    return (minimum, maksimum)

a = 10
b = 6.7

(mini, maksi) = minimum_i_maksimum(a, b)
print(mini, maksi)
6.7 10
In [244]:
# Funkcija moze vratiti niz
def niz_neparnih():
    return [1, 3, 5, 7, 9, 11, 13, 15, 17, 19]

svi_neparni = niz_neparnih()
[prvi, drugi, treci] = niz_neparnih()[:3]

print(svi_neparni)
print(prvi, drugi, treci)
[1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
1 3 5

Klase i objekti

In [245]:
class Vozilo:
    def __init__(self): # Konstruktor. Svi metodi klase za prvi argument imaju "self", kao referencu na objekat
        print('Napravljeno je novo vozilo!')
        
# Instanciranje objekta klase Vozilo
# "Self" se pri pozivu ne navodi ni u konstruktoru ni u drugim metodima
vozilo1 = Vozilo() 
Napravljeno je novo vozilo!
In [175]:
class Vozilo:
    def __init__(self, registarski_broj):
        print('Napravljeno je novo vozilo sa registarskim brojem {}!'.format(registarski_broj))
        self.registarski_broj = registarski_broj # Lokalne promenljive klase se dodeljuju na self
        
vozilo1 = Vozilo('BG-123-AB')
Napravljeno je novo vozilo sa registarskim brojem BG-123-AB!
In [178]:
class Vozilo:
    def __init__(self, registarski_broj):
        print('Napravljeno je novo vozilo sa registarskim brojem {}!'.format(registarski_broj))
        self.registarski_broj = registarski_broj
        
    def __str__(self): # Metod vraca nisku koja se ispisuje prilikom ispisa objekta (toString metod u drugim jezicima)
        return 'Vozilo: {}'.format(self.registarski_broj)
        
vozilo1 = Vozilo('BG-123-AB')
print(vozilo1)
        
Napravljeno je novo vozilo sa registarskim brojem BG-123-AB!
Vozilo: BG-123-AB
In [179]:
class Vozilo:
    def __init__(self, registarski_broj):
        print('Napravljeno je novo vozilo sa registarskim brojem {}!'.format(registarski_broj))
        self.registarski_broj = registarski_broj
        
    def __str__(self):
        return 'Vozilo: {}'.format(self.registarski_broj)
    
    def vrati_registarski_broj(self): # Setter
        return self.registarski_broj
    
    def postavi_registarski_broj(self, novi_registarski_broj): # Getter
        self.registarski_broj = novi_registarski_broj
        
vozilo1 = Vozilo('BG-123-AB')
print(vozilo1)
vozilo1.postavi_registarski_broj('BG-234-BC') # Pozivanje setter-a
print(vozilo1.vrati_registarski_broj()) # Pozivanje getter-a
Napravljeno je novo vozilo sa registarskim brojem BG-123-AB!
Vozilo: BG-123-AB
BG-234-BC
In [180]:
class Vozilo:
    def __init__(self, registarski_broj):
        print('Napravljeno je novo vozilo sa registarskim brojem {}!'.format(registarski_broj))
        self.registarski_broj = registarski_broj
        
    def __str__(self):
        return 'Vozilo: {}'.format(self.registarski_broj)
    
    def vrati_registarski_broj(self):
        return self.registarski_broj
    
    def postavi_registarski_broj(self, novi_registarski_broj):
        self.registarski_broj = novi_registarski_broj
        
    # Virtuelni metod
    def vrati_tip_vozila(self):
        pass
        
vozilo1 = Vozilo('BG-123-AB')
print(vozilo1.vrati_tip_vozila())
Napravljeno je novo vozilo sa registarskim brojem BG-123-AB!
None
In [182]:
class Vozilo:
    def __init__(self, registarski_broj):
        print('Napravljeno je novo vozilo sa registarskim brojem {}!'.format(registarski_broj))
        self.registarski_broj = registarski_broj
        
    def __str__(self):
        return 'Vozilo: {}'.format(self.registarski_broj)
    
    def vrati_registarski_broj(self):
        return self.registarski_broj
    
    def postavi_registarski_broj(self, novi_registarski_broj):
        self.registarski_broj = novi_registarski_broj
        
    # Virt. metod
    def vrati_tip_vozila(self):
        pass
    
# Ukoliko klasa nasledjuje drugu klasu, nasledjena klasa se navodi u zagradi pri deklaraciji podklase
class Automobil(Vozilo): # Klasa automobil nasledjuje klasu vozilo
    def __init__(self, registarski_broj):
        super().__init__(registarski_broj)
        self.tip_vozila = 'Automobil'
        
    def vrati_tip_vozila(self):
        return self.tip_vozila
        
vozilo1 = Vozilo('BG-123-AB')
print(vozilo1.vrati_tip_vozila())

automobil1 = Automobil('BG-234-BC')
print(automobil1.vrati_tip_vozila())
Napravljeno je novo vozilo sa registarskim brojem BG-123-AB!
None
Napravljeno je novo vozilo sa registarskim brojem BG-234-BC!
Automobil
In [185]:
class Vozilo:
    brojVozila = 0 # Staticka promenljiva
    def __init__(self, registarski_broj):
        print('Napravljeno je novo vozilo sa registarskim brojem {}!'.format(registarski_broj))
        self.registarski_broj = registarski_broj
        Vozilo.brojVozila += 1
        
    def __str__(self):
        return 'Vozilo: {}'.format(self.registarski_broj)
    
    def vrati_registarski_broj(self):
        return self.registarski_broj
    
    def postavi_registarski_broj(self, novi_registarski_broj):
        self.registarski_broj = novi_registarski_broj
        
    # Virt. metod
    def vrati_tip_vozila(self):
        pass
    
class Automobil(Vozilo):
    def __init__(self, registarski_broj):
        super().__init__(registarski_broj)
        self.tip_vozila = 'Automobil'
        
    def vrati_tip_vozila(self):
        return self.tip_vozila
        
vozilo1 = Vozilo('BG-123-AB')
automobil1 = Automobil('BG-234-BC')

print(automobil1.brojVozila)
Napravljeno je novo vozilo sa registarskim brojem BG-123-AB!
Napravljeno je novo vozilo sa registarskim brojem BG-234-BC!
2